Local APIC
Источники прерываний Local APIC’и могут получать прерывания от ниже следующих источников: * Locally connected I/O devices, локально подключенные устройства в/в — Эти прерывания могут, порождаются как фронтом, так и уровнем. В зависимости от того какое одобряет устройство. Такие устройства подключены напрямую к выводам процессоров (LINT0 и LINT1). Такие устройства в/в также могут быть подключены к 8259 контроллеру прерывания и он в свою очередь будет вызывать локальный контроллер прерываний через локальные линии прерываний (LINT0 и LINT1). * Externally connected I/O devices, внешне подключенные устройства в/в — Эти прерывания могут, порождаются как фронтом, так и уровнем. В зависимости от того какое одобряет устройство. Это устройство подключается к выходам I/O APIC. Вызванное таким способом прерывание рассылается I/O APIC при помощи специальных сообщений к одному или нескольким процессоров. * Inter-processor interrupts (IPIs) , меж процессорные прерывания— В процессорах Интел 64 или 32 могут использовать механизма IPI для прерывания другого процессора или группу процессоров связанных одной шиной. IPI используется для программного прерывания себя или другого процессора, для пересылки прерывания или оперативного управления. * APIC timer generated interrupts, прерывания сгенерированные APIC таймером— Local APIC таймер можно запрограммировать на посылку локального прерывания в процессор связанный с этим таймером. Прерывание будет посконно, когда таймеру это потребуется.(Смотри секцию, “APIC таймер”). * Performance monitoring counter interrupts , прерывания, вызванные счетчиками мониторинга производительности. Процессоры семейств P6, Pentium 4, и Intel Xeon одарены возможностью отсылать прерывания к текущему процессору. Посылка происходит когда счетчик мониторинга производительности переполняется. * Thermal Sensor interrupts, прерывания от термального датчика — Процессоры Pentium 4 и Intel Xeon умеют посылать прерывание самому себе когда внутренний термальный датчик среагирует. (Смотри секцию, “Thermal Monitor”). * APIC internal error interrupts, прерывания от внутренних ошибок APIC — Когда ошибка произошла и была опознана local APIC, он генерирует прерывание для процессора связанного с ним. (пример такими ошибками могут быть обращение к несуществующим регистрам ) (Смотри секцию, “Error Handling”). Базовый Адрес Обращение к регистрам Local APIC идет по внутренней шине. Поэтому базовые адреса Local APIC'ов могут перекрываться. И скорее всего все так и есть. По этой же причине регистры изолированны — ни один процессор напрямую не может обратиться к Local APIC другого процессора. Базовый адрес находится в MSR 0x0000001Bh Пример получения базового адреса mov ecx,MSR_APIC_BASE RDMSR ;проверяем состояние test ah,8 jnz apic_init_end ;выключен, включаем ;устанавливаем 11-й бит bts eax,11 WRMSR apic_init_end: and eax,0xFFFFF000 ;EAX содержит базовый адрес Регистры Все регистры Local APIC находятся в памяти по адресу, который находится в MSR 0x0000001Bh см. выше. (обычно это 0xFEE00000h) Каждый регистр имеет размерность 32 бита и расположен по адресу кратному 16 байтам. Local APIC ID Register Local APIC Version Register EOI Register Для прерываний кроме доставленных как NMI, SMI, INIT, ExtINT, startup, или INIT-Deassert, обработчик прерываний должен содержать команду которая сделает запись в регистр end-of-interrupt (EOI). Это запись, должна производиться в конце подпрограммы обработчика прерывания, перед машинной командой IRET. Это действие указывает что обслуживание текущего прерывания закончено, и Local APIC может выполнить следующее прерывание от ISR. После EOI, APIC очищает самый высокий приоритетный бит в ISR и посылает следующее, с самым высоким приоритетном, прерывание процессору. Если прерывание было настроено на реакцию на уровень сигнала(выбран режим тригера запуск уровнем, а не фронтом), то Local APIC также посылает сообщение конца прерывания ко всем I/O APIC'ам. Для будущей совместимости от программного обеспечения требуется: чтобы когда оно выполняет команду завершения прерывание путем записи значения в регистр EOI, оно должно выполнять запись в регистр EOI значением 0H. LVT Локальная таблица векторов(local vector table) или LVT. LVT Timer Register Вектор прерывания таймера. В этом регистре хранится режим работы таймера и номер вектора прерывания который будет вызываться. LVT Thermal Sensor Register Вектор прерывания температурного датчика. В этом регистре хранится номер вектора прерывания который будет вызываться и режим доставки(тип источника). LVT Performance Monitoring Counters Register Вектор счетчика производительности. В этом регистре хранится номер вектора прерывания который будет вызываться и режим доставки(тип источника). LVT LINT0 Register Вектор линии прерывания 0. В этом регистре хранится номер вектора прерывания который будет вызываться, режим доставки (тип источника) и другие настройки. LINT0 обычно выступает в качестве INTR вывода процессора для внешнего контроллера прерываний I/O APIC или 8259A PIC. В зависимости от режима системы прерываний Virtual Wire Mode или Symmetric I/O Mode Должен быть настроен соответственно. LVT LINT1 Register Вектор линии прерывания 1. В этом регистре хранится номер вектора прерывания, который будет вызываться, режим доставки (тип источника) и другие настройки. LINT1 обычно выступает в качестве NMI вывода процессора для внешних устройств. Должен быть настроен соответственно. LVT Error Register Вектор прерывания внутренней ошибки контроллера APIC. Initial Count Register (for Timer) Current Count Register (for Timer) При достижении значения счетчика 0 вызывается прерывание. Divide Configuration Register (for Timer) Регистр делителя частоты Таблица значений делителя частоты Intel: Отсчет времени таймера идет по сигналам тактовой частоты шины процессора, деленной на значение, указанное в регистре делителя частоты. (The time base for the timer is derived from the processor’s bus clock, divided by the value specified in the divide configuration register.) AMD: Поле DV определяет значение делителя тактовой частоты ядра процессора. (The DV field specifies the value of the CPU core clock divisor.) Категория:Оборудование